$(function() {
  var pageSize = 3; //每页条数
  var currentPage = 1; //当前页码
  function render() {
    //其他参数:beforeSend在发送之前可以使用return false取消,timeout超时时间,error,async同步还是异步
    $.ajax({
      type: "get", //get或post
      url: "/product/queryProductDetailList", //请求的地址
      data: {
        page: currentPage,
        // pageSize: pageSize
        // 对象的键值如果同名，可以省略一个
        pageSize
      }, //如果不需要传，则注释掉 请求的参数，a=1&b=2或{a:1,b:2}或者jq中的serialize方法，或者formData收集
      dataType: "json", //text,json,xml,jsonp
      success: function(res) {
        //成功的回调函数
        console.log(res);
        $("tbody").html(template("tmp", res));
        setPage(res.total);
        //   total 数据总个数
      }
    });
  }
  render();
  // 分页
  function setPage(total) {
    $("#paginator").bootstrapPaginator({
      bootstrapMajorVersion: 3, //默认是2，如果是bootstrap3版本，这个参数必填
      currentPage: currentPage, //当前页
      totalPages: Math.ceil(total / pageSize), //总页数
      //   size: "small", //设置控件的大小，mini, small, normal,large
      onPageClicked: function(event, originalEvent, type, page) {
        //为按钮绑定点击事件 page:当前点击的按钮值
        currentPage = page;
        // 重新渲染数据
        render();
      }
    });
  }
  // 3-下拉列表填充
  // 数据 + 模板
  //其他参数:beforeSend在发送之前可以使用return false取消,timeout超时时间,error,async同步还是异步
  $.ajax({
    type: "get", //get或post
    url: "/category/querySecondCategoryPaging", //请求的地址
    data: {
      page: 1,
      pageSize: 999
    }, //如果不需要传，则注释掉 请求的参数，a=1&b=2或{a:1,b:2}或者jq中的serialize方法，或者formData收集
    dataType: "json", //text,json,xml,jsonp
    success: function(res) {
      //成功的回调函数
      console.log(res);
      $(".cate-two-list").html(template("tmp-two", res));
    }
  });
  // 4-下拉列表选中
  // 1- 点击a标签，把a标签的文本赋值给 按钮
  // 2- 把a表单的data-id 赋值给隐藏域
  $(".cate-two-list").on("click", "a", function() {
    $(".cate-title").text($(this).text());
    // 2- 把a表单的data-id 赋值给隐藏域
    $("#brandId").val($(this).data("id"));
    // 在下拉列表选中后，恢复下拉列表选中状态
    $(".add-form")
      .data("bootstrapValidator")
      .updateStatus("brandId", "VALID");
  });

  // 5- 初始化文件上传插件
  // 图片上传要求：
  // 只保留最近上传的三张图片，做轮播图  （记录图片的个数和顺序： 用数组来解决 ）
  // 把最新图片添加在盒子的最前面
  // 图片预览
  var picArr = []; // 用数组记录图片的个数和顺序

  // 数组的方法：
  // 前面： 加 unshift ()  删： shift()
  // 后面： 加 push()      删：pop()
  // jquery 添加元素

  // prepend();  在元素内部的前面添加子元素
  // append();  在元素内部的后面追加子元素
  // before();  在盒子同级的前面添加兄弟元素
  // after();   在盒子同级的后面添加兄弟元素

  // remove(); 自杀
  // empty();  清空内容
  $("#file").fileupload({
    dataType: "json",
    //e：事件对象
    //data：图片上传后的对象，通过data.result.picAddr可以获取上传后的图片地址
    done: function(e, data) {
      //   console.log(data.result);
      var img = data.result;
      // 用imgArr存图片地址
      var imgArr = img.picAddr;
      // 记录图片顺序
      picArr.unshift(img);

      // 预览图片
      $(".img-box").prepend(
        '<img class="mr-10" src="' + imgArr + '" alt="" height="80">'
      );
      // 在jquery.fileupload.js 中，多文件上传，本质上就是 单文件上传执行多次！
      // 判断图片是否大于三张
      if (picArr.length > 3) {
        // 删除数组的最后一个元素
        picArr.pop();
        // img-box盒子中 删除最后一个 图片
        $(".img-box img:last-child").remove();
      }
      // 如果图片够了三张， 数据合理 把图片地址赋值给 隐藏域
      if (picArr.length == 3) {
        $("#picArr").val(JSON.stringify(picArr));
        $(".add-form")
          .data("bootstrapValidator")
          .updateStatus("picArr", "VALID");
      }
      console.log(picArr);
    }
  });

  // 6- 表单校验
  //使用表单校验插件
  $(".add-form").bootstrapValidator({
    //1. 指定不校验的类型，默认为[':disabled', ':hidden', ':not(:visible)'],可以不设置
    excluded: [":disabled"],

    //2. 指定校验时的图标显示，默认是bootstrap风格
    feedbackIcons: {
      valid: "glyphicon glyphicon-ok",
      invalid: "glyphicon glyphicon-remove",
      validating: "glyphicon glyphicon-refresh"
    },

    //3. 指定校验字段
    fields: {
      //校验用户名，对应name表单的name属性
      brandId: {
        validators: {
          //不能为空
          notEmpty: {
            message: "请选择二级分类"
          }
        }
      },
      proDesc: {
        validators: {
          //不能为空
          notEmpty: {
            message: "请输入商品名称"
          }
        }
      },
      proName: {
        validators: {
          //不能为空
          notEmpty: {
            message: "请输入商品名称"
          }
        }
      },
      num: {
        validators: {
          //不能为空
          notEmpty: {
            message: "请输入商品库存"
          },
          //正则校验
          regexp: {
            regexp: /^[1-9]\d*$/,
            message: "库存必须是非0开头的数字"
          }
        }
      },
      size: {
        validators: {
          //不能为空
          notEmpty: {
            message: "请输入商品尺码"
          },
          //正则校验
          regexp: {
            regexp: /^[1-9]\d-[1-9]\d$/,
            message: "尺码必须是xx-xx的格式， x数字"
          }
        }
      },
      oldPrice: {
        validators: {
          //不能为空
          notEmpty: {
            message: "请输入商品原价"
          }
        }
      },
      price: {
        validators: {
          //不能为空
          notEmpty: {
            message: "请输入商品现价"
          }
        }
      },
      picArr: {
        validators: {
          //不能为空
          notEmpty: {
            message: "请上传三张图片"
          }
        }
      }
    }
  });

  // 7- 手动恢复图片和下拉列表的校验状态
  //     在下拉列表选中后，恢复下拉列表选中状态
  //     当图片够三张时， 恢复图片的校验状态

  // 8- 对库存和尺码进行正则校验
  //     库存： 非0开头的数字
  //     尺码： xx-xx格式 x 是数字

  // 9-添加商品
  // 1- 点击提交按钮，在表单数据合理的情况下，向后台发送请求
  // 2- 后台添加成功后， 页面重新渲染 ，隐藏模态框，表单重置， 手动清空图片和按钮 的样式
  $(".add-form").on("success.form.bv", function(e) {
    e.preventDefault();
    var str = $(".add-form").serialize();
    console.log(str);
    // ajax提交
    $.ajax({
      type: "post",
      url: "/product/addProduct",
      data: str,
      dataType: "json",
      success: function(res) {
        console.log(res);
        // 页面重新渲染
        render();
        // 隐藏模态框
        $(".modal-add").modal("hide");
        // 表单重置 数据 校验样式
        $(".add-form")
          .data("bootstrapValidator")
          .resetForm(true);
        // 手动清空图片和按钮 的样式
        $(".img-box").empty();
        // $('.img-box img').remove();
        // $('.img-box').hmtl('');
        $(".cate-title").text("请选择二级分类");
        // 清空picArr数组
        picArr = []; // 防止删除添加图片的数据，对下次添加产生影响；
      }
    });
  });
});
